<?php
require_once 'RegisterView.php';

class LoginHandler
{
	private $m_database = NULL;
	private $m_tablePrefix = NULL;

    public function __construct(DatabaseConnection $database)
    {
        $this->m_database = $database;
		$this->m_tablePrefix = $database->getTablePrefix();
    }

	// IsLoggedIn hantera ifall användaren är inloggad eller inte.
	// Bestämmer även ifall information får visas eller inte.
	public function isLoggedIn()
	{
		if (isset($_SESSION['username']) && isset($_SESSION['password']))
		{

			// Kontrollerar ifall Remeber är ikryssat.
			$lw = new LoginView();
			if ($lw->isRemeberChecked() == true)
			{
				$lw->doCookie($_SESSION['username'], $_SESSION['password']);
			}

			return true;
		}
		return false;
	}

	// Loggar in användaren.
	public function doLogin($username, $password)
	{	
		$uid = "";
		$sqlStatement = "SELECT uid, username, password FROM ".$this->m_tablePrefix."users WHERE username=? AND password=?";

	   	if ($stmt = $this->m_database->PrepareStatement($sqlStatement))
		{
			// Binder inparametrarna.
			$stmt->bind_param("ss", $username, $password);
	
			// Kör SQL-frågan.
			$stmt->execute();
	
			// Binder resultatet.
			$stmt->bind_result($uid, $username, $password);
	
			// Kontrollerar om användaren finns.
			if ($stmt->fetch() == true)
			{
				// Skapar en session med sessionvariablerna.
				$_SESSION['uid'] = $uid;
				$_SESSION['username'] = $username;
				$_SESSION['password'] = $password;
	
				$stmt->close();
				return true;
			}
		}
		return false;
	}

	// DoLogout
	// Loggar ut anv�ndaren.
	public function doLogout()
	{
	   $lw = new LoginView();
	   
	   // Anropar funktion för att ta bort cookies.
	   $lw->removeCookie();

	   // Tar bort sessionsvariablerna.
	   unset($_SESSION['uid']);
	   unset($_SESSION['username']);
	   unset($_SESSION['password']);
	}
	
	// Kollar om användaren är admin.
	public function isUserAdmin($username)
	{
		$sqlStatement = "SELECT admin FROM ".$this->m_tablePrefix."users WHERE username=?";
		
		if ($stmt = $this->m_database->PrepareStatement($sqlStatement))
		{
			$stmt->bind_param("s", $username);
			
			$stmt->execute();
			
			$stmt->bind_result($isAdmin);
			
			if ($stmt->fetch() == true)
			{
				if($isAdmin == "true")
				{
					return true;
				}
				return false;
			}
		}		
	}

	public function test()
	{
		// Loggar ut! (s�kert tillst�nd)
		$this->doLogout();

		// Kontrollerar om inloggad eller inte.
		if ($this->isLoggedIn() == true)
		{
			echo "LoginHandler::IsLoggedIn, misslyckades!<br />";
			return false;
		}

		// Loggningstest med felaktiga uppgigfter.
		// returnerar false, om testet skall lyckas annars true.
		if ($this->doLogin("Hej", sha1("hej")) == true)
		{
			echo "LoginHandler::DoLogin med feluppgifter, misslyckades. <br />";
			return false;
		}

		// Loggningstest med r�tta uppgigfter.
		// returnerar true, om testet skall lyckas annars false.
		if ($this->doLogin("testuser", sha1("test")) == false)
		{
			echo "LoginHandler::DoLogin med rättuppgifter, misslyckades! <br />";
			return false;
		}
		
		// Loggningstest med felaktiga uppgigfter.
		// returnerar false, om testet skall lyckas annars true.
		if ($this->doLogin("Hej", sha1("hej")) == true)
		{
			echo "LoginHandler::DoLogin med feluppgifter, misslyckades. <br />";
			return false;
		}
		
		
		// Loggningstest med r�tta uppgigfter.
		// returnerar true, om testet skall lyckas annars false.
		if ($this->doLogin("testuser", sha1("test")) == false)
		{
			echo "LoginHandler::DoLogin med rättuppgifter, misslyckades! <br />";
			return false;
		}

		// Ska kunna logga in nu.
		if ($this->isLoggedIn() == false)
		{
			echo "LoginHandler::IsLoggedIn, misslyckades! <br />";
			return false;
		}
		
		// Loggar ut.
		$this->doLogout();
		
		// Användaren ska inte vara inloggad.
		if ($this->isLoggedIn() == true)
		{
			echo "LoginHandler::isLoggedIn lyckdes, men borde inte göra det.";
			return false;
		}
		
		if ($this->doLogin("testuser", sha1("test")) == false)
		{
			echo "LoginHandler::DoLogin med 'testuser', 'test', misslyckades. <br />";
			return false;
		}
		
		// Test av inloggning med tomt användarnamn. men rätt lösenord.
		if ($this->doLogin("", sha1("test")) == true)
		{
			echo "LoginHandler::doLogin Du kan inte logga in med ett tomt användarnamn.";
			return false;
		}

		// Testar att logga in med tomma fällt.
		if ($this->doLogin("", sha1("")) == true)
		{
			echo "LoginHandler::doLogin Du kan inte logga in med tomma fält.";
			return false;
		}
		
		// Loggar ut användaren.
		$this->doLogout();
		
		// Testet lyckades.
		return true;
	}
}